const TIMEOUT_LOGIN_LOADING = 2000;
function _getFormData(form) {
    var data = {};
    form.find('input[name],select[name]').each(function () {
        var name = jQuery(this).attr('name');
        data[name] = jQuery(this).val();
    });
    return data;
}
function _disableForm(form) {
    form.find('input[name],select[name]').each(function () {
        jQuery(this).prop('disabled', true);
    });
    form.find('.login-input').hide();
    form.find('.login-loading').show();
}
function _enableForm(form) {
    form.find('input[name],select[name]').each(function () {
        jQuery(this).prop('disabled', false);
    });
    setTimeout(function () {
        form.find('div.login-loading').hide();
    }, TIMEOUT_LOGIN_LOADING);
}
function _isUndefined(variable) {
    return(variable === null || typeof(variable) === 'undefined');
}
function _redirect(url) {
    if (!_isUndefined(url)) {
        window.location.href = url;
    }
}
function _alert(content) {
    alert(content);
}
function _showError(content, obj) {
    if (!_isUndefined(content)) {
        if (_isUndefined(obj)) {
            _alert(content);
        }
        else {
            obj.text(content);
            setTimeout(function () {
                jQuery('.login-fail').show();
            }, TIMEOUT_LOGIN_LOADING);
        }
    }
}
function BackToLogin() {
    jQuery('.login-fail').hide();
    jQuery('.login-input').show();
}
function ShowPass(id) {
    if (!_isUndefined(id)) {
        jQuery(id).prop('type', 'text');
    }
}
function HidePass(id) {
    if (!_isUndefined(id)) {
        jQuery(id).prop('type', 'password');
    }
}
/**
 * @return {boolean}
 */
function Login(thisForm) {
    var thisObj = jQuery(thisForm);
    var url = thisObj.attr('action');
    var data = _getFormData(thisObj);
    if (data['username'] == '') {
        jQuery('#username').focus();
        return false;
    }
    if (data.password == '') {
        jQuery('#password').focus();
        return false;
    }

    jQuery.ajax({
        'url': url,
        'type': 'POST',
        'data': data,
        'beforeSend': function () {
            _disableForm(thisObj);
        },
        'error': function () {
            _enableForm(thisObj);
            _showError('Request Fail!');
        },
        'success': function (data) {
            _enableForm(thisObj);
            try {
                var json = JSON.parse(data);
                if (json.status) {
                    if (json.code == 'redirect') {
                        setTimeout(function () {
                            _redirect(json.content);
                        }, TIMEOUT_LOGIN_LOADING);
                    }
                }
                else {
                    if (json.code == 'error') {
                        _showError(json.content, jQuery('.login-message'));
                    }
                    if (json.code == 'csrf') {
                        _showError(json.content);
                        window.location.reload();
                    }
                }
            }
            catch (e) {
                _showError('Invalid Json');
            }
        }
    });
    return true;
}